/**
 *  forms mixin module
 *  @module base/mixin/forms
 *  @author coder
 */
// import {
//   fetchForms,
//   getForms,
//   addForms,
//   updateForms,
//   removeForms,
//   batchForms
// } from '@/base/api/forms'

// mixin
export default {

  /**
   * forms数据存储载体对象
   * @member forms
   * @property {Array} [list=[]] 获取forms列表响应数据
   * @property {number} [page=null] 获取forms列表响应页码
   * @property {number} [limit=null] 获取forms列表页大小，每页记录条数
   * @property {number} [total=0] 获取forms列表数据记录总条数
   * @property {object} [model=null] 获取forms单条记录
   */
  data() {
    return {
      forms: {
        list: [],
        page: null,
        limit: null,
        total: 0,
        model: null
      }
    }
  },
  methods: {

    /**
     * 获取forms列表
     * @function fetchForms
     * @param {object} data 请求发送的数据data
     * @returns {Promise} Promise实例
     */
    fetchForms(data) {
      return fetchForms(data).then(res => {
        this.forms.list = res.list || []
        this.forms.page = Number.parseInt(res.page) || 0
        this.forms.limit = Number.parseInt(res.limit) || 0
        this.forms.total = Number.parseInt(res.total) || 0
        return res
      })
    },
    /**
     * 获取forms单条记录
     * @function getForms
     * @param {string|number} id 请求URL路径参数id数据
     * @param {object} data 请求发送的数据data
     * @returns {Promise} Promise实例
     */
    getForms(id, data) {
      return getForms(id, data).then(res => {
        this.forms.model = Object.assign({}, data, res || {})
        return res
      })
    },
    /**
     * 新增forms
     * @function addForms
     * @param {object} data 请求发送的数据data
     * @param {number} [index] 新增到列表的位置索引，默认最近到列表最后
     * @returns {Promise} Promise实例
     */
    addForms(data, index) {
      return addForms(data, index).then(res => {
        this.forms.model = Object.assign({}, data, res || {})
        if (index !== undefined) {
          this.forms.list.splice(index, 0, this.forms.model)
        } else {
          this.forms.list.push(this.forms.model);
        }
        this.forms.total += 1;
        return res
      })
    },
    /**
     * 更新forms
     * @function updateForms
     * @param {object} data 请求发送的数据data
     * @param {number} [index] 源实体在列表的位置索引，如没有index，即不更新实体在源列表数据
     * @returns {Promise} Promise实例
     */
    updateForms(data, index) {
      return updateForms(data, index).then(res => {
        this.forms.model = Object.assign({}, data, res || {})
        if (index !== undefined) {
          this.forms.list.splice(index, 1, this.forms.model)
        }
        return res
      })
    },
    /**
     * 删除forms
     * @function removeForms
     * @param {string|number} id 请求URL路径参数id数据
     * @param {object} data 请求发送的数据data
     * @param {number} [index] 源实体在列表的位置索引，如没有index，即不删除实体在源列表数据
     * @returns {Promise} Promise实例
     */
    removeForms(id, data, index) {
      return removeForms(id, data).then(res => {
        if (index !== undefined) {
          this.forms.list.splice(index, 1)
        }
        this.forms.total -= 1;
        return res
      })
    },
    /**
     * 批量删除forms
     * @function batchForms
     * @param {object} data 请求发送的数据data
     * @param {number[]} [indexes] 源实体在列表的位置索引，如没有indexes，即不删除实体在源列表数据
     * @returns {Promise} Promise实例
     */
    batchForms(data, indexes = []) {
      return batchForms(data).then(res => {
        if (indexes.length > 0) {
          this.forms.list = this.forms.list.filter((item, index) => !indexes.includes(index))
        }
        this.forms.total -= indexes.length;
        return res
      })
    }
  }
}
